Всем привет!
Продемонстрирую:
- пример работы с аналитиками учета (затрат и НДС);
- пример работы с документом ОперацияБух - будем заполнять проводки;
- пример свертки регистра накопления "Раздельный учет НДС", который содержит в составе измерений справочные данные аналитик учета (затрат и НДС);
- пример свертки регистра бухгалтерии Хозрасчетный по определенному счету.
На основе этих примеров вы сможете разработать свои правила для сворачивания баз данных БП Проф и Корп 3.0. На универсальность не претендую.
Примеры реализованы:
- на платформе 1С:Предприятие 8.3.25.1374;
- на конфигурации Бухгалтерия предприятия КОРП, релизы 3.0.155.21, 3.0.131.27.
* * *
Задача, на основе которой была разработана внешняя обработка, и в качестве примера которой будут представлены алгоритмы, следующая - до января 2024 года учет запасов велся на 10 счете без учета партий. С 1 января 2024 года нужно включить учет партий по ФИФО. Подобная задача может встретиться для направления оборонзаказа, для которого списание материалов должно происходить строго по ФИФО.
Итак, мы включаем параметр в настройках учета - см. рис.
И на начало 2024 года должны списать остатки по 10 счету без партий и оприходовать те же остатки уже с одной Партией. В БП есть специализированный документ "Партия" (см. рис. ниже) - для указания партии при вводе начальных остатков, в остальном - все документы поступления и перемещений являются документами-партий автоматически.
Решение исходной задачи делится на два этапа. На первом этапе мы сводим остатки по счету 10 - для примера рассмотрим только субсчет 10.01, на втором - сводим остатки по регистру "Раздельный учет НДС".
На первом этапе - при работе с регистром Хозрасчетный - у нас нет аналитик учета (см. рис.).
Они возникают на втором этапе - когда мы начинаем работать с регистром накопления - конкретно, с регистром Раздельный учет НДС (см. рис.).
К слову сказать, в БП Корп это единственный регистр накопления, где используются аналитики учета (ключи аналитики учета затрат и ключи аналитики учета НДС) - в других конфигурациях, например, в ERP регистров накопления с аналитиками учета будет больше, но суть работы с ними не изменится.
Итак, приступим к решению задачи. Сначала получим остатки на конец 2023 года по счету 10.01, затем заполним проводки следующим образом: по Кредиту 10.01 спишем, по Дебету 10.01 оприходуем остатки - см. листинг 1.
Для начинающих дополнительно напишу:
- ресурс Сумма - балансовый (прописываем один раз), ресурсы Количество и СуммаНУ - не балансовые, поэтому прописываем по Кт и Дт отдельно. На практике часто значения по Кт и Дт совпадают, но в теории совпадать не обязательны.
- Для установки субконто используется устоявшаяся конструкция БухгалтерскийУчет .УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, 1, Выборка.Субконто1). Посмотрите общий модуль БухгалтерскийУчет и процедуру УстановитьСубконто - такой алгоритм используется с 2008 года (может и ранее) и перешел из обычных форм на управляемые без изменений. Полагаю, что в ERP алгоритм аналогичный.
&НаСервере
Процедура ЗаполнитьОстаткамиНаСервере()
//1. получим список остатков по субконто
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет КАК Счет,
| ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
| ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
| ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
| ХозрасчетныйОстатки.Организация КАК Организация,
| ХозрасчетныйОстатки.КоличествоОстаток КАК Количество,
| ХозрасчетныйОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , ) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Период", Объект.Период);
Запрос.УстановитьПараметр("Счет", Объект.Счет);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Док = Объект.ОперацияБух.ПолучитьОбъект();
НЗ = Док.Движения.Хозрасчетный;
//2. заполним операцию бух
Пока Выборка.Следующий() Цикл
//регистр Хозрасчетный
Запись = НЗ.Добавить();
Запись.Период = Объект.Период;
Запись.УточнениеПериода = Объект.Период;
Запись.Организация = Выборка.Организация;
Запись.СчетДт = Объект.Счет;
Запись.КоличествоДт = Выборка.Количество;
Запись.СуммаНУДт = Выборка.Сумма;
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, 1, Выборка.Субконто1);
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, 2, Выборка.Субконто2);
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, 3, Выборка.Субконто3);
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, Объект.НомСубконтоПартия, Объект.ДокПартии);
Если Объект.ВклНовыйСклад Тогда
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетДт, Запись.СубконтоДт, Объект.НомСубконтоСклад, Объект.Склад);
КонецЕсли;
Запись.СчетКт = Объект.Счет;
Запись.КоличествоКт = Выборка.Количество;
Запись.СуммаНУКт = Выборка.Сумма;
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетКт, Запись.СубконтоКт, 1, Выборка.Субконто1);
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетКт, Запись.СубконтоКт, 2, Выборка.Субконто2);
БухгалтерскийУчет.УстановитьСубконто(Запись.СчетКт, Запись.СубконтоКт, 3, Выборка.Субконто3);
Запись.Сумма = Выборка.Сумма;
КонецЦикла;
НЗ.Записывать = Истина;
НЗ.Записать();
... //другой код - см. листинги ниже
КонецПроцедуры
Я не использую конструкцию Док = Документы.ОперацияБух.СоздатьОбъект(). Я создаю документы ОперацияБух, Партия, СчетФактураПолученный вручную интерактивно, затем использую в обработке - см. рис. Хотя название обработки остается без изменений "СоздатьОперациюБух". Такой оборот речи.
Если вам нужно на начало года оставить один склад, то можете использовать в обработке параметр "ВключитьНовыйСклад" и указать склад. Тогда остатки по счету 10.01 спишутся с соответствующих складов, оприходуются на указанный склад.
На этом первый этап заканчивается. Продемонстрирован:
- пример работы с документом ОперацияБух - пример заполнения проводок;
- пример свертки регистра бухгалтерии Хозрасчетный по определенному счету *.
*В данном случае по счету 10.01 мы посадили остатки на одну партию. Таким способом можно сворачивать остатки по всем партиям (документам поступления и перемещений) на одну партию (специализированный документ Партия), при необходимости можно остатки по всем складам свернуть на один склад.
Переходим ко второму этапу. Также получим остатки по регистру Раздельный учет НДС, далее спишем по текущим измерениям (в том числе по текущим ключам аналитик учета) и оприходуем по измерениям (но уже по своим ключам аналитик учета) - см. листинг 2.
//3. получим список остатков по регистру НДС Раздельный учет
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НДСРаздельныйУчетОстатки.Организация КАК Организация,
| НДСРаздельныйУчетОстатки.АналитикаУчетаЗатрат КАК АналитикаУчетаЗатрат,
| НДСРаздельныйУчетОстатки.АналитикаУчетаНДС КАК АналитикаУчетаНДС,
| НДСРаздельныйУчетОстатки.СпособУчетаНДС КАК СпособУчетаНДС,
| НДСРаздельныйУчетОстатки.Партия КАК Партия,
| НДСРаздельныйУчетОстатки.КоличествоОстаток КАК Количество,
| НДСРаздельныйУчетОстатки.СуммаБезНДСОстаток КАК СуммаБезНДС,
| НДСРаздельныйУчетОстатки.НДСОстаток КАК НДС
|ИЗ
| РегистрНакопления.НДСРаздельныйУчет.Остатки(&Период, ) КАК НДСРаздельныйУчетОстатки";
Запрос.УстановитьПараметр("Период", Объект.Период);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Док = Объект.ОперацияБух.ПолучитьОбъект();
НайденнаяСтрока = Док.ТаблицаРегистровНакопления.Найти("НДСРаздельныйУчет", "Имя");
Если НайденнаяСтрока = Неопределено Тогда
СтрРегистра = Док.ТаблицаРегистровНакопления.Добавить();
СтрРегистра.Имя = "НДСРаздельныйУчет";
Док.Записать();
КонецЕсли;
НЗ = Док.Движения.НДСРаздельныйУчет;
//4. заполним регистр НДС Раздельный учет
Пока Выборка.Следующий() Цикл
//расход
Запись = НЗ.Добавить();
Запись.Период = Объект.Период;
Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
ЗаполнитьЗначенияСвойств(Запись, Выборка);
//приход
Если Выборка.Количество > 0 Тогда
Запись = НЗ.Добавить();
Запись.Период = Объект.Период;
Запись.ВидДвижения = ВидДвиженияНакопления.Приход;
ЗаполнитьЗначенияСвойств(Запись, Выборка);
Запись.АналитикаУчетаЗатрат = ПолучитьНовуюАналитикуУчетаЗатрат(Выборка.АналитикаУчетаЗатрат, Объект.ДокПартии, Объект.НомСубконтоПартия, Объект.ВклНовыйСклад, Объект.Склад, Объект.НомСубконтоСклад);
Если Объект.ВклНовуюСчетФактуру Тогда
Запись.АналитикаУчетаНДС = ПолучитьНовуюАналитикуУчетаНДС(Выборка.АналитикаУчетаНДС, Объект.СчетФактура);
КонецЕсли;
Запись.Партия = Объект.ДокПартии;
КонецЕсли;
КонецЦикла;
НЗ.Записывать = Истина;
НЗ.Записать();
Как видим в листинге 2, для регистра накопления сначала делаем запись с видом Расход, затем для положительного количества делаем запись с видом Приход.
Функции по созданию аналитик отражены в том же модуле обработки, что и основная процедура заполнения проводок, но для целей описания деталей представлены в отдельном листинге 3.
&НаСервере
Функция ПолучитьНовуюАналитикуУчетаЗатрат(АналитикаУчетаЗатрат, Партия, НомерСубконтоПартия, ВклНовыйСклад, Склад, НомСубконтоСклад)
Если НЕ ЗначениеЗаполнено(АналитикаУчетаЗатрат) Тогда
Возврат Справочники.КлючиАналитикиУчетаЗатрат.ПустаяСсылка();
КонецЕсли;
мСклад = ?(ВклНовыйСклад, Склад, АналитикаУчетаЗатрат["Субконто"+НомСубконтоСклад]);
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КлючиАналитикиУчетаЗатрат.Ссылка КАК Ссылка
|ИЗ
| Справочник.КлючиАналитикиУчетаЗатрат КАК КлючиАналитикиУчетаЗатрат
|ГДЕ
| КлючиАналитикиУчетаЗатрат.Организация = &Организация
| И КлючиАналитикиУчетаЗатрат.СчетЗатрат = &СчетЗатрат
| И КлючиАналитикиУчетаЗатрат.Подразделение = &Подразделение
| И КлючиАналитикиУчетаЗатрат.Субконто1 = &Субконто1
| И КлючиАналитикиУчетаЗатрат.Субконто2 = &Субконто2
| И КлючиАналитикиУчетаЗатрат.Субконто3 = &Субконто3
| И КлючиАналитикиУчетаЗатрат.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("Организация", АналитикаУчетаЗатрат.Организация);
Запрос.УстановитьПараметр("СчетЗатрат", АналитикаУчетаЗатрат.СчетЗатрат);
Запрос.УстановитьПараметр("Подразделение", АналитикаУчетаЗатрат.Подразделение);
Запрос.УстановитьПараметр("Субконто1", АналитикаУчетаЗатрат.Субконто1);
Запрос.УстановитьПараметр("Субконто"+НомерСубконтоПартия, Партия);
Запрос.УстановитьПараметр("Субконто"+НомСубконтоСклад, мСклад);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Количество() > 1 Тогда
Сообщить("Найдено несколько аналитик учета затрат с одинаковыми ключами: " + Символы.ПС
+ АналитикаУчетаЗатрат.Организация + Символы.ПС
+ АналитикаУчетаЗатрат.СчетЗатрат + Символы.ПС
+ АналитикаУчетаЗатрат.Подразделение + Символы.ПС
+ АналитикаУчетаЗатрат.Субконто1 + Символы.ПС
+ Партия + Символы.ПС
+ мСклад);
КонецЕсли;
//Если Ложь Тогда
// АналитикаУчетаЗатрат = Справочники.КлючиАналитикиУчетаЗатрат.СоздатьЭлемент().Ссылка;
//КонецЕсли;
Если Выборка.Следующий() Тогда
НоваяАналитикаУчетаЗатрат = Выборка.Ссылка.ПолучитьОбъект();
Иначе
НоваяАналитикаУчетаЗатрат = АналитикаУчетаЗатрат.ПолучитьОбъект().Скопировать();
//здесь мы задаем свою Партию и Склад
НоваяАналитикаУчетаЗатрат["Субконто" + НомерСубконтоПартия] = Партия;
НоваяАналитикаУчетаЗатрат["Субконто" + НомСубконтоСклад] = мСклад;
//НоваяАналитикаУчетаЗатрат.Записать();
НоваяАналитикаУчетаЗатрат.Наименование = Справочники.КлючиАналитикиУчетаЗатрат.ПолучитьНаименованиеКлючаАналитикиУчетаЗатрат(НоваяАналитикаУчетаЗатрат);
НоваяАналитикаУчетаЗатрат.Записать();
КонецЕсли;
ПараметрыАналитики = ПолучитьСтруктуруАналитикУчетаЗатрат(НоваяАналитикаУчетаЗатрат);
СоздатьКлючАналитикиЗатрат(ПараметрыАналитики, НоваяАналитикаУчетаЗатрат.Ссылка);
Возврат НоваяАналитикаУчетаЗатрат.Ссылка;
КонецФункции
&НаСервере
Функция ПолучитьНовуюАналитикуУчетаНДС(АналитикаУчетаНДС, СчетФактура)
Если НЕ ЗначениеЗаполнено(АналитикаУчетаНДС) Тогда
Возврат Справочники.КлючиАналитикиУчетаНДС.ПустаяСсылка();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КлючиАналитикиУчетаНДС.Ссылка КАК Ссылка
|ИЗ
| Справочник.КлючиАналитикиУчетаНДС КАК КлючиАналитикиУчетаНДС
|ГДЕ
| КлючиАналитикиУчетаНДС.Организация = &Организация
| И КлючиАналитикиУчетаНДС.СчетФактура = &СчетФактура
| И КлючиАналитикиУчетаНДС.ВидЦенности = &ВидЦенности
| И КлючиАналитикиУчетаНДС.СчетУчетаНДС = &СчетУчетаНДС
| И КлючиАналитикиУчетаНДС.СтавкаНДС = &СтавкаНДС
| И КлючиАналитикиУчетаНДС.Поставщик = &Поставщик
| И КлючиАналитикиУчетаНДС.ИсправленныйСчетФактура = &ИсправленныйСчетФактура
| И КлючиАналитикиУчетаНДС.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("Организация", АналитикаУчетаНДС.Организация);
Запрос.УстановитьПараметр("СчетФактура", СчетФактура);
Запрос.УстановитьПараметр("ВидЦенности", АналитикаУчетаНДС.ВидЦенности);
Запрос.УстановитьПараметр("СчетУчетаНДС", АналитикаУчетаНДС.СчетУчетаНДС);
Запрос.УстановитьПараметр("СтавкаНДС", АналитикаУчетаНДС.СтавкаНДС);
Запрос.УстановитьПараметр("Поставщик", АналитикаУчетаНДС.Поставщик);
Запрос.УстановитьПараметр("ИсправленныйСчетФактура", АналитикаУчетаНДС.ИсправленныйСчетФактура);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Количество() > 1 Тогда
Сообщить("Найдено несколько аналитик учета НДС с одинаковыми ключами: " + Символы.ПС
+ АналитикаУчетаНДС.Организация + Символы.ПС
+ СчетФактура + Символы.ПС
+ АналитикаУчетаНДС.ВидЦенности + Символы.ПС
+ АналитикаУчетаНДС.СчетУчетаНДС + Символы.ПС
+ АналитикаУчетаНДС.СтавкаНДС + Символы.ПС
+ АналитикаУчетаНДС.Поставщик);
КонецЕсли;
//Если Ложь Тогда
// АналитикаУчетаНДС = Справочники.КлючиАналитикиУчетаНДС.СоздатьЭлемент().Ссылка;
//КонецЕсли;
Если Выборка.Следующий() Тогда
НоваяАналитикаУчетаНДС = Выборка.Ссылка.ПолучитьОбъект();
Иначе
НоваяАналитикаУчетаНДС = АналитикаУчетаНДС.ПолучитьОбъект().Скопировать();
//здесь мы задаем свою Партию
НоваяАналитикаУчетаНДС.СчетФактура = СчетФактура;
//НоваяАналитикаУчетаНДС.Записать();
НоваяАналитикаУчетаНДС.Наименование = Справочники.КлючиАналитикиУчетаНДС.ПолучитьНаименованиеКлючаАналитикиУчетаНДС(НоваяАналитикаУчетаНДС);
НоваяАналитикаУчетаНДС.Записать();
КонецЕсли;
ПараметрыАналитики = ПолучитьСтруктуруАналитикУчетаНДС(НоваяАналитикаУчетаНДС);
СоздатьКлючАналитикиНДС(ПараметрыАналитики, НоваяАналитикаУчетаНДС.Ссылка);
Возврат НоваяАналитикаУчетаНДС.Ссылка;
КонецФункции
&НаСервере
Функция ПолучитьСтруктуруАналитикУчетаЗатрат(АналитикаУчетаЗатрат)
СтруктураАналитикУчетаЗатрат = Новый Структура("
|Организация,
|СчетЗатрат,
|Подразделение,
|Субконто1,
|Субконто2,
|Субконто3,
|");
СтруктураАналитикУчетаЗатрат.Организация = АналитикаУчетаЗатрат.Организация;
СтруктураАналитикУчетаЗатрат.СчетЗатрат = АналитикаУчетаЗатрат.СчетЗатрат;
СтруктураАналитикУчетаЗатрат.Подразделение = АналитикаУчетаЗатрат.Подразделение;
СтруктураАналитикУчетаЗатрат.Субконто1 = ?(ЗначениеЗаполнено(АналитикаУчетаЗатрат.Субконто1), АналитикаУчетаЗатрат.Субконто1, Неопределено);
СтруктураАналитикУчетаЗатрат.Субконто2 = ?(ЗначениеЗаполнено(АналитикаУчетаЗатрат.Субконто2), АналитикаУчетаЗатрат.Субконто2, Неопределено);
СтруктураАналитикУчетаЗатрат.Субконто3 = ?(ЗначениеЗаполнено(АналитикаУчетаЗатрат.Субконто3), АналитикаУчетаЗатрат.Субконто3, Неопределено);
Возврат СтруктураАналитикУчетаЗатрат;
КонецФункции
&НаСервере
Процедура СоздатьКлючАналитикиЗатрат(ПараметрыАналитики, АналитикаУчетаЗатрат)
МенеджерЗаписи = РегистрыСведений.АналитикаУчетаЗатрат.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыАналитики);
МенеджерЗаписи.КлючАналитики = АналитикаУчетаЗатрат;
МенеджерЗаписи.Записать(Истина);
КонецПроцедуры
&НаСервере
Функция ПолучитьСтруктуруАналитикУчетаНДС(АналитикаУчетаНДС)
СтруктураАналитикУчетаНДС = Новый Структура("
|Организация,
|СчетФактура,
|ВидЦенности,
|СчетУчетаНДС,
|СтавкаНДС,
|Поставщик,
|ИсправленныйСчетФактура
|");
СтруктураАналитикУчетаНДС.Организация = АналитикаУчетаНДС.Организация;
СтруктураАналитикУчетаНДС.СчетФактура = АналитикаУчетаНДС.СчетФактура;
СтруктураАналитикУчетаНДС.ВидЦенности = АналитикаУчетаНДС.ВидЦенности;
СтруктураАналитикУчетаНДС.СчетУчетаНДС = АналитикаУчетаНДС.СчетУчетаНДС;
СтруктураАналитикУчетаНДС.СтавкаНДС = АналитикаУчетаНДС.СтавкаНДС;
СтруктураАналитикУчетаНДС.Поставщик = АналитикаУчетаНДС.Поставщик;
СтруктураАналитикУчетаНДС.ИсправленныйСчетФактура = АналитикаУчетаНДС.ИсправленныйСчетФактура;
Возврат СтруктураАналитикУчетаНДС;
КонецФункции
&НаСервере
Процедура СоздатьКлючАналитикиНДС(ПараметрыАналитики, АналитикаУчетаНДС)
МенеджерЗаписи = РегистрыСведений.АналитикаУчетаНДС.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыАналитики);
МенеджерЗаписи.КлючАналитики = АналитикаУчетаНДС;
МенеджерЗаписи.Записать(Истина);
КонецПроцедуры
Аналитику сначала ищем по ключевым полям, далее используем найденную или создаем новую аналитику копированием, а в ней изменяем реквизит, соответствующий нашей задаче по смыслу и содержанию.
В таком подходе есть большой нюанс - запрос к базе данных происходит в цикле. Для прохождения тестовых собеседований и экзаменов на сертификат 1С - такой подход не подойдет. Но для внешней обработки, которая делает 17 тыс. записей по регистру за 5 минут - подойдет. Я полагаю многие так поступают для разовых работ обработок.
Второй этап завершен. Далее проверяется проведение документов за январь 2024 г, например, Требование-накладная (Расход материалов), закрытие месяца за январь и т.д. При этом возможны ошибки "Не хватает остатков для целей учета НДС" - по складу не хватает столько-то штук... По сути это уже третий этап - отладочный - в каждой базе данных будут выявлены свои ошибки...
Итак, по второму этапу продемонстрирован:
- пример работы с аналитиками учета (затрат и НДС);
- пример свертки регистра накопления "Раздельный учет НДС", который содержит в составе измерений справочные данные аналитик учета (затрат и НДС).
Что еще можно добавить? На скринах видно, что было использовано две базы - одна Демо БП Корп для подготовки и разработки обработки, вторая - копия рабочей базы БП Корп - для отладки и собственно доработки алгоритмов.
С тем, что разработка и отладка алгоритма проводились на разных версиях БП Корп и на разных базах данных, связан еще один нюанс разработки. В Демо-базе номер субконто "Склад" = 3, а номер субконто "Партия" = 2 - по счету 10.01. В рабочей базе БП Корп наоборот: номер субконто "Склад" = 2, а номер субконто "Партия" = 3 - по счету 10.01.
Надеюсь, кому-то пригодится. Было потрачено по 30 часов разработчика и аналитика.
* * *
На этом все.
Всем добра! С пользой для клиентов, RustIG
- Анализ прав и ролей. Поиск подходящего профиля - алгоритмический анализ и поиск
- Оцифровка и визуализация склада - программная прорисовка склада
- Удаление документов для любых баз на управляемых формах
- Удаление справочников для любых баз на управляемых и обычных формах
- Перенумерация документов и справочников - с учетом префиксов номеров
- Свертка базы УТ 10.3 подокументно - новая концепция
- Матричное программирование - демо-стенд матричного калькулятора
- Справочное хранение товаров в КА 2.5 - кейс запуска адресного склада
- Мини-обзор разных задач - от очевидного до неочевидного
- Поиск отчета по документам - пример анализа незнакомых конфигураций
- Флажок в динамическом списке - от теории до практики "как бы простой" задачи
- Из Json в ДеревоЗначений - удобный просмотрщик json-структуры
- Внедрение адресного склада в КА 2.5 - кейс запуска адресного склада
- Фрилансеру: про цены, про клиентов, про планирование - мое исследование
- Что такое форматированный документ - прекрасная возможность раскрасить любой текст
- Программная работа с упаковками в КА 2.5 - примеры адаптаций механизмов упаковок в КА 2.5
- Универсальное сравнение регистров накопления - связь по измерениям, сравнение по ресурсам
- Обход объекта рекурсивно - просмотр реквизитов документа с бесконечным открытием подуровней
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.155.21, 3.0.131.27