Подводные камни конфигурации 1С:Предприниматель 7.7

27.08.10

Разработка - Механизмы типовых конфигураций

У этой конфигурации есть мерзкая особенность: если ее верно настроить в соответствии с действующим законодательством (убрать галочку в Настройках "Отражать доходы и расходы по операциям прошлого года"), то она начинает очень медленно проводиться при групповом проведении и падать с ошибкой "CODEBASE ERROR. Error #: -920. Out of Memory. Sorting".

Это предостережение для тех, кто пользует конфу 1С:Предприниматель 7.7, устанавливая константу ПризнаниеРасходовПоДоходамПрошлыхПериодов в положение "Нет" (что требует современное толкование НК и ГК).

 

Есть в гл.модуле замечательная ф-я глДвиженияПоРасходамМатериальныхРесурсов - по сути выполняет списание партий ТМЦ. В эту ф-ю передается (среди прочих) параметр СобственныйЗапрос.
Если этот параметр равен 0, то в ф-и просто берутся конечные остатки партий ТМЦ на позицию проводимого документа. Если не 0, то строится чёрный запрос от начала года до проводимого документа, который якобы вытягивает обороты партий за период с начала года. Я сказал "якобы", потому что на самом деле он обороты вытягивает неправильно. В тексте запроса применена конструкция "Условие (Запрос.Количество > 0)" (ошибочно?), которая приводит к тому что ф-и Приход/Расход в запросе (те самые обороты) возвращают результат в виде 0 либо искаженным.
Может, это было так и задумано разработчиками, но я не могу понять для чего... Это, во-первых.

 

На последствия конструкции "Условие (Запрос.Количество > 0)" мне глаза открыл многоуважаемый Ёпрст, за что я его от всей души благодарю. В основном, именно за это, а не за многочисленные тексты прямых запросов, полученных от него, которые в большинстве случаев не работали :)))

 

Во-вторых, при групповом проведении документов постоянное выполнение чёрного запроса в случае, когда СобственныйЗапрос <> 0, приводит к резкому замедлению, примерно на порядок, проведения документов [напомню, "на порядок" значит "в 10 раз"] и к лавинообразному заполнению оперативной памяти и, как следствие, к аварийному завершению программы с ошибкой "Out of memory"

 

В-третьих. Я сделал анализ, в каких случаях и для чего используется параметр СобственныйЗапрос, не равный 0, в ф-и глДвиженияПоРасходамМатериальныхРесурсов.

 

Начнем с "для чего". Чёрный запрос якобы (почему "якобы" - написано выше) вытягивает Обороты, чтобы выяснить, какая часть из конечных остатков партий оплачена поставщику в текущем году, а какая в прошлом или ранее (налоговый период для ИП - год). Т.е. конечные остатки партий в таблице (ТаблицаОстатков), возвращаемой из данной ф-и расщепляются на пару строк, признак оплаты поставщику данной доли остатка (текущий/прошлый год) кладется в колонку этой таблицы "ПериодОплатыПоставщику".
Теперь выясним "в каких случаях".
Ф-я глДвиженияПоРасходамМатериальныхРесурсов используется в модулях проведения многих документов, и только один из них - "Реализация ТМЦ" - в качестве параметра СобственныйЗапросможет (если константа ПризнаниеРасходовПоДоходамПрошлыхПериодов /синоним "Отражать доходы и расходы по операциям прошлого года"/ равна "Нет") передавать значение, не равное 0. Значит, только этот вид документа может вызвать выполнение паразитного чёрного запроса.
Проанализируем как документ "Реализация ТМЦ" использует таблицу, возвращенную ф-ией глДвиженияПоРасходамМатериальныхРесурсов. Напомню, что чёрный запрос был призван, чтобы заполнить колонку "ПериодОплатыПоставщику" в возвращаемой ф-ией таблице.
Анализ привел к выводу, что расщепление конечных остатков партий товаров в зависимости от "ПериодОплатыПоставщику" в обработке проведения документа "Реализация ТМЦ"... никак не используется.
Честно признаться, от такого вывода я оторопел.

 

Т.е. самое обидное из всей ситуации с бесполезным чёрным запросом это "во-вторых": "приводит к резкому замедлению, примерно на порядок, проведения докуметов и ...  к аварийному завершению программы с ошибкой "Out of memory""
Мои теоретические измышления я подтвердил практикой (только этим весь день и занимался) - перепровел базу за два года, отключив этот чёрный запрос, и сравнил результат проведения с прошлым результатом, когда лопатился этот запрос. Финансовый результат стал отличным на 5 копеек при 140 млн. руб. оборота за год! ((( Т.е. практика подтвердила выжеизложенную теорию. (5 коп. скорее всего возникли из-за неполной чистоты эксперимента - я попутно исправил мелкую ошибку).
 
И все-таки, я начал глубже анализировать логику проведения документа "Реализация ТМЦ", силясь понять тайный замысел разработчиков.
Единственное упоминание на необходимость разделения оплат партий ТМЦ поставщику по годам, я нашел только в виде комментария:
// Если оплата поставщику была в этом году, а аванс от покупателя поступил в прошлом году
за которым следует код, который никак не использует полученное разделение.
Анализируя этот комментарий и следующий  за ним код, я смог допустить лишь следующее:
Разработчики хотели признать в доходы оплату от покупателя, полученную в прошлом периоде (году) и одновременно признать расходы по оплате поставщику, если оплата поставщику была произведена также в прошлом периоде. Если же оплата поставщику была произведена в текущем периоде (при оплате покупателю в прошлом), то для налогового учета мы не можем признать ни доходы, ни расходы.
На самом деле такая позиция несостоятельна, мы не можем признать оплату от покупателя прошлого года, даже если партия товара была также оплачена поставщику в прошлом периоде. Видимо, и разработчики также пришли к этому выводу и не стали использовать разделение оплат поставщику в модуле проведения документа "Реализация ТМЦ". Но при этом забыли исключить паразитный чёрный запрос в гл. модуле.

 

Значит, остается эту оплошность исправить самим (и надеяться, что кто-нибудь сможет достучаться по хотлайну до ЗАО "1С", чтобы они исправили это у себя в будущих релизах 1С:Предпринимателя - прошу прощения за наивность).
Итак, все исправления делаются в обработке проведения документа "Реализация":
1) из текста

Если НеПризнаватьРасходовПоПрошлымДоходам = 0 Тогда
	СписокРегистров.ДобавитьЗначение("Расходы");
КонецЕсли;

убираем условие - получается:

// Если НеПризнаватьРасходовПоПрошлымДоходам = 0 Тогда
СписокРегистров.ДобавитьЗначение("Расходы");
// КонецЕсли;

это чтобы ф-я глДвиженияПоРасходамМатериальныхРесурсов могла обратиться к регистру партий (Расходы) и вытянуть остатки.
2) Чтобы заблокировать выполнение чёрного запроса строку

Если глДвиженияПоРасходамМатериальныхРесурсов(Контекст, ТаблицаСтоимости, ОбщРег,, НеПризнаватьРасходовПоПрошлымДоходам) = 0 Тогда

меняем на:

Если глДвиженияПоРасходамМатериальныхРесурсов(Контекст, ТаблицаСтоимости, ОбщРег) = 0 Тогда

Уточню, НеПризнаватьРасходовПоПрошлымДоходам - это СобственныйЗапрос в параметрах данной ф-и.
 
И это всё.
Теперь конфигурация будет проводиться на порядок быстрее и не валиться с ошибкой "Out of memory"! Причем требуемый функционал данной конфы сохранится в полном объеме.

См. также

Как получить номер и дату договора из наименования справочника договоров?

Механизмы типовых конфигураций Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

В типовых конфигурациях платформы "1С:Предприятие 7.7" часто номер и дата договора указаны в самом наименовании договора. Что создает сложности в тех случаях, когда эти реквизиты надо знать, например, при конвертации данных в конфигурации платформы "1С:Предприятие 8", где номер и дата договора - отдельные реквизиты.

1 стартмани

24.09.2015    28455    2    SiAl    7    

7

Исправление и проведение документов

Универсальные функции Механизмы типовых конфигураций Бухгалтерский учет 7.7 1С:Производство+Услуги+Бухгалтерия Россия Бесплатно (free)

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

23.07.2012    14247    BorisBelov    11    

6

Взаимозачет по партиям для регистра "ПартииНаличие"

Логистика, склад и ТМЦ Механизмы типовых конфигураций Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Бухгалтерский учет Абонемент ($m)

В процессе работы с конфигурацией ТИС, в разрезе одной номенклатуры могут накапливаться как положительные так и отрицательные остатки по различным партиям. Данная обработка содержит модуль проведения регламентного документа, который можно было бы создать в конфигурации и условно назвать "КорректировкаПартий", посредством которого можно провести взаимозачёт таких партий.

1 стартмани

02.01.2012    14815    124    Digo65    19    

12
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. microsott 28.08.10 10:18 Сейчас в теме
4. victuan 4232 28.08.10 18:45 Сейчас в теме
(1) Что переделать, чтобы стало читаемо?
(3) Купить вместо БАЗОВОЙ версии версию ПРОФ
5. iov 406 29.08.10 00:22 Сейчас в теме
(4)
Чтобы читаемо - простой текст- черный
(3) Вынести мозг 1С и франчам... можно просто доказать что программа не работает и вернуть деньги либо потребовать исправления. Можете поискать в инете прецеденты по ПО с ошибками есть. Программа должна выполнять заявленный функционал иначе это можно уже переквалифицировать в другую статью. В общем юрист вам в помощь и вам подарят версию проф или исправят ошибку.
А может и пошлют 1С не любит покупателей которые недовольны...
6. victuan 4232 29.08.10 14:47 Сейчас в теме
(5) Темносиний нормально на белом фоне смотрится, не вижу смысла переделывать.
7. tsd 105 29.08.10 15:46 Сейчас в теме
(6) на самом деле нет. Стандартные цвета были бы лучше. Кроме того, я бы еще добавил форматирование по ширине и убрал бы половину красных выделений. В контексте они читаться будут нормально, а смысла их выделять особо нет, только глаза разбегаться начинают.

ЗЫ: а почему чОрный?
8. Abadonna 3958 29.08.10 16:13 Сейчас в теме
(7) На вкус и цвет...
Меня тоже синий не радует, а слово "чОрный" вообще глаз режет, хоть автор мне ответил, что это специально. Не знаю-не знаю...
9. Abadonna 3958 29.08.10 16:15 Сейчас в теме
+(8) Давно заметил, что проблемы у современной молодежи с "че" и "чо" существуют ;)
Пишут "девчЕнка", когда не надо, и наоборот
11. victuan 4232 29.08.10 17:15 Сейчас в теме
(9) Ну-ну, могу и обидеться, "по-русскому" у меня врожденная грамотность, в школе одни пятерки были.
13. Abadonna 3958 29.08.10 17:18 Сейчас в теме
(11) Ну так исправь ;)
Не будешь же ты каждому комментарию отвечать
врожденная грамотность

Когда человек пишет "начальНЕГ" - тут однозначно ясно, что прикалывается.
А в данном случае не совсем ясно
17. victuan 4232 29.08.10 18:11 Сейчас в теме
(13) Исправлю завтра - как раз рабочий день будет :) А насчет "чОрный" я почему-то думал, что это норма, т.к. многие известные специалисты (типа Ёпрста и пр.) его давно в таком виде употребляют - и мне лично такое произношение по душе приглянулось, как подчеркивание низменности данного способа программирования.
(15) Думаю, что нет. Так как данный сабж сопровождает 1С:Предпринимателя аж с 2004 года - а релизов с тех пор было немало.
(16) Ну вот, как я и говорил, только после моего поста высветилиь посты ветки, которые я получил как уведомления на маил (надеюсь, за "маил" Абадонна меня не упрекнет в грамотности :oops: )
20. tsd 105 29.08.10 19:39 Сейчас в теме
(17) "черный запрос" стали писать для явного указания, что запрос выполнен не через объект бухгалтерские итоги, а обычным запросом 1С. А "чорный", не иначе, как кто-то по неграмотности своей стал писать.

Единственный нормальный способ обновить страницу ИС указан в (19), "Очистить кеш публикации (beta)". На тех страницах где этой ссылки нет, например в профиле, большая Ж... , кеш не сбросить.
Превратил народ ИС в большую файлопомойку, вот он и не выдерживает, приходится саппорту извращаться кеширование ставя.

2. SoftLeon 27 28.08.10 12:25 Сейчас в теме
3. zveruganet 72 28.08.10 15:47 Сейчас в теме
а как заставить конфигурацию принять изменения без потери лицензии?
не заставляя "индивидуального предпринимателя" переходить на ломанную 1С?
10. victuan 4232 29.08.10 17:13 Сейчас в теме
Ваши замечания бесценны. Всяко со стороны взгляд свежее. Буду переделывать...
12. victuan 4232 29.08.10 17:16 Сейчас в теме
(+11) Смайлик забыл :D
ЗЫ. На Абадонну не могу в принципе обидеться - он умный и почти земляк.
14. Abadonna 3958 29.08.10 17:40 Сейчас в теме
А само исследование, думаю, плюсика достойно.
15. iov 406 29.08.10 17:57 Сейчас в теме
а 1С в курсе этой проблемы? Или не стали беспокоить по мелочам? :D
18. victuan 4232 29.08.10 18:13 Сейчас в теме
(15) Да я и не могу лично побеспокоить хотлайн этой проблемой - мой Заказчик не является обладателем лицензионной конфигурации :cry: .
16. victuan 4232 29.08.10 18:05 Сейчас в теме
Ничё ни понимаю, что за глючный ИС.
А на маил комменты получаю, а здесь их нет (даже после F5) - ответить не могу. Они появляются только тогда когда я какой-нить комент тут напишу - например, этот. :|
19. Abadonna 3958 29.08.10 18:20 Сейчас в теме
(16)
А на маил комменты получаю, а здесь их нет (даже после F5)

Контекстное меню, пункт "Очистить кеш публикации (beta)" тебе в помощь.
У меня в Опере так же, пока не нажмешь.
надеюсь, за "маил" Абадонна меня не упрекнет в грамотности

Напомнил ;): в дремучие годы (еще до ПК) знавал проггера, который на полном серьезе (уж не знаю какой язык он учил) называл операторы так: рун, тхен, гото, госуб, элсе.. :D
21. vasilykushnir 63 30.08.10 08:47 Сейчас в теме
(19) У нас одна девка уже в институте читала на английском "томато" И "потато". Ее так и прозвали Ирка-ТоматоИПотато. А "немцы" (изучавшие немеций) часто говорят, как видят "ретурн", "баскспасе" (backspace). А один бывший учитель математики, ставший проггером, такие перлы выдавал - долго потом все из-под столов вылазили. Хотя при этом программил весьма прилично. Оказалось одно другому не помеха.
22. Abadonna 3958 30.08.10 08:49 Сейчас в теме
(21) "баскспасе" еще куда ни шло. Я раз даже не сразу понял, что такое "баскуп филес";)
Оставьте свое сообщение